﻿#include "header.h"

/*

给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。

示例 1:
输入: [1,3,5,6], 5
输出: 2

示例 2:
输入: [1,3,5,6], 2
输出: 1

示例 3:
输入: [1,3,5,6], 7
输出: 4

示例 4:
输入: [1,3,5,6], 0
输出: 0

*/

//标准二分查找模板
class Solution1 {
public:
	int searchInsert(vector<int> &nums, int target) 
	{
		int len = nums.size();
		if (target > nums[len - 1]) return len;
		int lo = 0, hi = len - 1;
		while (lo < hi)
		{
			int mi = lo + ((hi - lo) >> 1);
			if (nums[mi] < target)
			{
				lo = mi + 1;
			}
			else
			{
				hi = mi;
			}
		}
		return lo;
	}
};
//https://leetcode-cn.com/problems/search-insert-position/solution/te-bie-hao-yong-de-er-fen-cha-fa-fa-mo-ban-python-/

class Solution2 {
public:
	int searchInsert(vector<int> &nums, int target)
	{
		int len = nums.size();
		int lo = 0, hi = len;
		while (lo < hi)
		{
			int mi = lo + ((hi - lo) >> 1);
			(target > nums[mi]) ? lo = mi + 1 : hi = mi;
		}
		return lo;
	}
};